package pe.edu.upc.e41a.javasoft.domain;

import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.springframework.roo.addon.dbre.RooDbManaged;
import org.springframework.roo.addon.javabean.RooJavaBean;
import org.springframework.roo.addon.jpa.activerecord.RooJpaActiveRecord;
import org.springframework.roo.addon.tostring.RooToString;

@Entity
@Table(name = "categoria")
@RooJavaBean
@RooToString
@RooDbManaged(automaticallyDelete = true)
@RooJpaActiveRecord(versionField = "", table = "categoria", finders = { "findCategoriasByCategorias", "findCategoriasByDescripcionEquals", "findCategoriasByDescripcionIsNotNull", "findCategoriasByDescripcionIsNull", "findCategoriasByDescripcionLike", "findCategoriasByDescripcionNotEquals", "findCategoriasByNombreEquals", "findCategoriasByNombreIsNotNull", "findCategoriasByNombreIsNull", "findCategoriasByNombreLike", "findCategoriasByNombreNotEquals", "findCategoriasByPadre", "findCategoriasByPublicacions" })
public class Categoria {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "codigo", columnDefinition = "INT")
    private Integer codigo;

    @OneToMany(mappedBy = "categoria")
    private Set<Publicacion> publicacions;

    @ManyToOne
    @JoinColumn(name = "padre", referencedColumnName = "codigo")
    private pe.edu.upc.e41a.javasoft.domain.Categoria padre;

    @Column(name = "nombre", columnDefinition = "VARCHAR", length = 20)
    @NotNull
    private String nombre;

    @Column(name = "descripcion", columnDefinition = "VARCHAR", length = 100)
    private String descripcion;

    public String toString() {
        return ReflectionToStringBuilder.toString(this, ToStringStyle.SHORT_PREFIX_STYLE);
    }

    public Integer getCodigo() {
        return this.codigo;
    }

    public void setCodigo(Integer id) {
        this.codigo = id;
    }

    public Set<pe.edu.upc.e41a.javasoft.domain.Publicacion> getPublicacions() {
        return publicacions;
    }

    public void setPublicacions(Set<pe.edu.upc.e41a.javasoft.domain.Publicacion> publicacions) {
        this.publicacions = publicacions;
    }

    public pe.edu.upc.e41a.javasoft.domain.Categoria getPadre() {
        return padre;
    }

    public void setPadre(pe.edu.upc.e41a.javasoft.domain.Categoria padre) {
        this.padre = padre;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }
}
